在本教程中,您将创建小组件存储,为您提供一个视图,供您浏览和选择小组件,并选择要在另一个视图中查看其说明的小组件。您在上一步骤末尾运行工程时,仅看到应用程序背景。在本教程上一步中通过 Kanzi Studio 工程创建、并使用 API 加载的 kzb 文件包括使用该 API 创建应用程序逻辑所需的所有节点和资源:
要使用 Kanzi Engine API 访问 Kanzi Studio 工程的内容:
private: //3D 网格列表框 (Grid List Box 3D) 节点,其中包含小组件。 GridListBox3DSharedPtr m_widgetList; //当前在 Widget Grid List Box 节点中选择的小组件。 GridListBox3D::ItemSharedPtr m_selectedItem; //场景摄像机。 CameraSharedPtr m_camera; //摄像机动画变换目标。 SRTValue3D m_cameraTransformationTarget; //动画化摄像机的动画剪辑。 SRTValue3DAnimationSharedPtr m_cameraAnimation; //动画化摄像机的时间线回放。 TimelinePlaybackSharedPtr m_cameraPlayback; //高亮显示该项的时间线回放。 TimelinePlaybackSharedPtr m_widgetHighlightPlayback; //启用 Back button 的时间线回放。 TimelinePlaybackSharedPtr m_backButtonEnablePlayback; //动画化选定小组件的动画剪辑项。 SRTValue3DAnimationSharedPtr m_selectedItemAnimation; //含已选小组件和 Back button //描述的描述面板。 NodeSharedPtr m_widgetDescriptionNode; //动画化小组件描述可见性的动画剪辑。 BoolAnimationSharedPtr m_widgetDescriptionVisibilityAnimation; //动画化小组件描述可见性动画的时间线回放。 TimelinePlaybackSharedPtr m_widgetDescriptionVisibilityPlayback; //3D 文本块 (Text Block 3D) 节点,其中显示 //Widget Description Layer 节点中的小组件描述。 TextBlock3DSharedPtr m_widgetDescriptionTextBlock; //小组件上的 Back button。 NodeSharedPtr m_backButton; //禁用和启用 Back button 的动画剪辑。 BoolAnimationSharedPtr m_backButtonEnableAnimation; //用于存储小组件名称的用户定义属性类型。 StringDynamicPropertyTypeSharedPtr m_widgetNamePropertyType; //用于存储小组件描述的用户定义属性类型。 StringDynamicPropertyTypeSharedPtr m_widgetDescriptionPropertyType;
ProgrammerTutorialApplication
类中的 onConfigure
函数后添加 onProjectLoaded()
函数。onProjectLoaded()
内,Kanzi 会在您加载应用程序后调用该函数。protected: //在加载工程时初始化应用程序。 virtual void onProjectLoaded() KZ_OVERRIDE { }
#
) 后跟别名名称来检索别名目标节点,而不管节点在工程中的位置。请参阅 使用别名。virtual void onProjectLoaded() KZ_OVERRIDE { ScreenSharedPtr screen = getScreen(); //访问 Kanzi Studio 工程二进制文件的内容。 //获取存储所有小组件实例的 3D 网格列表框 (Grid List Box 3D) 组件引用。 //该路径由 Kanzi Studio 工程中可编辑的别名定义。 GridListBox3DSharedPtr widgetList = screen->lookupNode<GridListBox3D>("#Widget list"); //获取摄像机对象节点引用,将进行动画化。 CameraSharedPtr camera = screen->lookupNode<Camera>("#Camera"); //创建摄像机目标变换。 SRTValue3D cameraTransformationTarget = SRTValue3D(Vector3(1.0f, 1.0f, 1.0f), Vector3(kzsDegreesToRadians(60.0f), kzsDegreesToRadians(0.0f), 0.0f), Vector3(-1.5f, 7.0f, -5.0f)); //获取Widget Description Layer 节点的引用。 NodeSharedPtr widgetDescriptionNode = screen->lookupNode<Node>("#Widget description layer"); //获取对Widget Description Layer 中文本块的引用,其中显示小组件说明。 TextBlock3DSharedPtr widgetDescriptionTextBlock = screen->lookupNode<TextBlock3D>("#Widget description"); //获取Widget Description Layer 节点中的 Back button 引用。 NodeSharedPtr backButton = screen->lookupNode<Node>("#Back button"); //创建禁用和启用Back button 的动画剪辑。 BoolAnimationSharedPtr backButtonEnableAnimation = FromToAnimation<bool, StepEasingFunction>::create(getDomain(), chrono::seconds(1), false, true); //创建隐藏Widget Description Layer 的动画剪辑。 BoolAnimationSharedPtr widgetDescriptionVisibilityAnimation = FromToAnimation<bool, StepEasingFunction>::create(getDomain(), chrono::seconds(1), true, false); //为动画化选定列表框项而创建动画剪辑。 SRTValue3DAnimationSharedPtr selectedItemAnimation = FromToAnimation<SRTValue3D, LinearEasingFunction>::create(getDomain(), chrono::milliseconds(800), SRTValue3D(Vector3(1.0f, 1.0f, 1.0f), Vector3(kzsDegreesToRadians(0.0f), 0.0f, 0.0f), Vector3(0.0f, 0.0f, 0.0f)), SRTValue3D(Vector3(1.0f, 1.0f, 1.0f), Vector3(kzsDegreesToRadians(60.0f), 0.0f, 0.0f), Vector3(0.0f, 0.0f, 1.0f))); }
DynamicPropertyType
并使用 Kanzi Studio 工程中使用的相同名称。 属性和资源一样包含在共享指针中。class ProgrammerTutorialApplication: public ExampleApplication { ... //键入在 Kanzi Studio 工程中定义的自定义属性类型 //的共享指针。 typedef shared_ptr<DynamicPropertyType<string> > StringDynamicPropertyTypeSharedPtr; protected: virtual void onProjectLoaded() KZ_OVERRIDE { ... //获取自定义属性类型,以存储小组件名称。自定义 //属性类型在 Kanzi Studio 工程中创建。 StringDynamicPropertyTypeSharedPtr widgetNamePropertyType = StringDynamicPropertyTypeSharedPtr(new DynamicPropertyType<string>("Programmertutorial.WidgetName")); //获取自定义属性类型,以存储小组件描述。自定义 //属性类型在 Kanzi Studio 工程中创建。 StringDynamicPropertyTypeSharedPtr widgetDescriptionPropertyType = StringDynamicPropertyTypeSharedPtr(new DynamicPropertyType<string>("Programmertutorial.WidgetDescription")); } ... };
virtual void onProjectLoaded() KZ_OVERRIDE { ... //存储获得的资源和查找的节点。 using std::swap; swap(m_widgetList, widgetList); swap(m_camera, camera); swap(m_cameraTransformationTarget, cameraTransformationTarget); swap(m_selectedItemAnimation, selectedItemAnimation); swap(m_widgetDescriptionNode, widgetDescriptionNode); swap(m_widgetDescriptionVisibilityAnimation, widgetDescriptionVisibilityAnimation); swap(m_widgetDescriptionTextBlock, widgetDescriptionTextBlock); swap(m_backButton, backButton); swap(m_backButtonEnableAnimation, backButtonEnableAnimation); swap(m_widgetNamePropertyType, widgetNamePropertyType); swap(m_widgetDescriptionPropertyType, widgetDescriptionPropertyType); }